home *** CD-ROM | disk | FTP | other *** search
- ;;; -*- Mode: Lisp; Package: Maxima; Syntax: Common-Lisp; Base: 10 -*- ;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; The data in this file contains enhancments. ;;;;;
- ;;; ;;;;;
- ;;; Copyright (c) 1984,1987 by William Schelter,University of Texas ;;;;;
- ;;; All rights reserved ;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; (c) Copyright 1980 Massachusetts Institute of Technology ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (in-package "MAXIMA")
- (macsyma-module ufact)
-
- (DECLARE-TOP (SPECIAL MODULUS COEF-TYPE))
-
- (load-macsyma-macros ratmac rzmac)
-
- ;; Dense Polynomial Representation
-
- (DEFUN DPREP (P)
- (DO ((N (CAR P))
- (E (CAR P) (f1- E))
- (L))
- ((< E 0) (CONS N (NREVERSE L)))
- (COND ((EQUAL E (CAR P))
- (PUSH (CADR P) L)
- (SETQ P (CDDR P)))
- (T (PUSH 0 L)))))
-
- (DEFUN DPDISREP (L)
- (COND ((ZEROP (CAR L)) (CADR L))
- ((DO ((L (NREVERSE (CDR L)) (CDR L))
- (N 0 (f1+ N))
- (LL))
- ((NULL L) LL)
- (OR (= (CAR L) 0)
- (SETQ LL (CONS N (CONS (CAR L) LL))))))))
-
- ;; not currently called
- ;;(DEFUN PGCDU* (P Q)
- ;; (COND ((OR (PCOEFP P) (PCOEFP Q)) 1)
- ;; ((NULL MODULUS)
- ;; (merror "ILLEGAL CALL TO PGCDU"))
- ;; ((> (CADR P) (CADR Q))
- ;; (PSIMP (CAR P) (DPDISREP (DPGCD (DPREP (CDR P)) (DPREP (CDR Q))))))
- ;; ((PSIMP (CAR P) (DPDISREP (DPGCD (DPREP (CDR Q)) (DPREP (CDR P))))))))
- ;;
- ;;(DEFUN PMODSQFRU (P)
- ;; (DO ((DPL (DPSQFR (DPREP (CDR P))) (CDR DPL))
- ;; (PL NIL (CONS (PSIMP (CAR P) (DPDISREP (CDAR DPL))) (CONS (CAAR DPL) PL))))
- ;; ((NULL DPL) PL)))
-
- (DEFUN DPGCD (P Q)
- (IF (< (CAR P) (CAR Q)) (EXCH P Q))
- (DO ((P (COPY-TOP-LEVEL P) Q)
- (Q (COPY-TOP-LEVEL Q) (DPREMQUO P Q NIL)))
- ((= (CAR Q) 0)
- (IF (= (CADR Q) 0) P '(0 1)))))
-
- (DEFUN DPDIF (P Q)
- (COND ((> (CAR P) (CAR Q))
- (DO ((I (CAR P) (f1- I))
- (PL (CDR P) (CDR PL))
- (L NIL (CONS (CAR PL) L)))
- ((= I (CAR Q)) (DPDIF1 PL (CDR Q) L)) ))
- ((< (CAR P) (CAR Q))
- (DO ((I (CAR Q) (f1- I))
- (QL (CDR Q) (CDR QL))
- (L NIL (CONS (CMINUS (CAR QL)) L)))
- ((= I (CAR P)) (DPDIF1 (CDR P) QL L))))
- (T (DPDIF1 (CDR P) (CDR Q) NIL))))
-
- (DEFUN DPDIF1 (P1 Q1 L)
- (DO ((PL P1 (CDR PL))
- (QL Q1 (CDR QL))
- (LL L (CONS (CDIFFERENCE (CAR PL) (CAR QL)) LL)))
- ((NULL PL) (DPSIMP (NREVERSE LL)))))
-
- (DEFUN DPSIMP (PL) (SETQ PL (ufact-strip-zeroes PL))
- (COND ((NULL PL) '(0 0))
- (T (CONS (f1- (LENGTH PL)) PL))))
-
- (DEFUN DPDERIV (P)
- (COND ((= 0 (CAR P)) '(0 0))
- (T (DO ((L (CDR P) (CDR L))
- (I (CAR P) (f1- I))
- (DP NIL (CONS (CTIMES I (CAR L)) DP)))
- ((= I 0) (CONS (f1- (CAR P)) (NREVERSE DP)))))))
-
- (DEFUN DPSQFR (Q) ;ASSUMES MOD > DEGREE
- (DO ((C Q (DPMODQUO C P))
- (D (DPDERIV Q) (DPMODQUO D P))
- (I 0 (f1+ I))
- (P)
- (PL))
- ((= 0 (CAR C)) PL)
- (COND (P (SETQ D (DPDIF D (DPDERIV C))
- P (DPGCD C D))
- (AND (> (CAR P) 0)
- (SETQ PL (CONS (CONS I P) PL))))
- (T (SETQ P (DPGCD C D))
- (COND ((= (CAR P) 0) (RETURN (NCONS (CONS 1 C)))))))))
-
-
-
- (DEFUN DPMODREM (P Q)
- (COND ((< (CAR P) (CAR Q)) P)
- ((= (CAR Q) 0) '(0 0))
- ((DPREMQUO (COPY1* P) (COPY1* Q) NIL))))
-
- (DEFUN DPMODQUO (P Q)
- (COND ((< (CAR P) (CAR Q)) '(0 0))
- ((= (CAR Q) 0)
- (COND ((EQUAL (CADR Q) 1) P)
- (T (CONS (CAR P)
- (MAPCAR #'(LAMBDA (C) (CQUOTIENT C (CADR Q))) (CDR P))
- ))))
- ((DPREMQUO (COPY1* P) (COPY1* Q) T))))
-
- ;; If FLAG is T, return quotient. Otherwise return remainder.
-
- (DEFUN DPREMQUO (P Q FLAG)
- (PROG (LP LQ L ALPHA)
- (COND ((= (CADR Q) 1)
- (SETQ ALPHA 1))
- (T (SETQ ALPHA (CRECIP (CADR Q)))
- (DO ((L (CDDR Q) (CDR L)))
- ((NULL L)
- (RPLACA (CDR Q) 1))
- (RPLACA L (CTIMES (CAR L) ALPHA)))))
- A (AND FLAG (SETQ L (CONS (CTIMES (CADR P) ALPHA) L)))
- (SETQ LP (CDDR P) LQ (CDDR Q))
- B (RPLACA LP (CDIFFERENCE (CAR LP) (CTIMES (CAR LQ) (CADR P))))
- (COND ((NULL (SETQ LQ (CDR LQ)))
- (DO ((E (f1- (CAR P)) (f1- E))
- (PP (CDDR P) (CDR PP)))
- ((NULL PP) (SETQ P '(0 0)))
- (COND ((SIGNP E (CAR PP))
- (AND FLAG (NOT (< E (CAR Q)))
- (SETQ L (CONS 0 L))))
- ((RETURN (SETQ P (CONS E PP))))))
- (COND ((< (CAR P) (CAR Q))
- (RETURN (COND (FLAG (DPSIMP (NREVERSE L)));GET EXP?
- (P))))
- ((GO A))))
- (T (SETQ LP (CDR LP))
- (GO B)))))
-
- (DEFUN ufact-strip-zeroes (L)
- (DO ((L L (CDR L)))
- ((NULL (CZEROP (CAR L))) L)))
-
- (DEFUN CPRES1 (A B)
- (PROG (RES (V 0) A3) (DECLARE (FIXNUM V))
- (SETQ A (DPREP A) B (DPREP B))
- (SETQ RES 1)
- AGAIN (SETQ A3 (DPMODREM A B))
- (SETQ V (BOOLE BOOLE-XOR V (logand 1 (CAR A) (CAR B) )))
- (SETQ RES (CTIMES RES (CEXPT (CADR B)
- (f- (CAR A) (CAR A3)))))
- (COND ((= 0 (CAR A3))
- (SETQ RES (CTIMES RES (CEXPT (CADR A3) (CAR B))))
- (RETURN (COND ((ODDP V) (CMINUS RES))
- (T RES))) ))
- (SETQ A B)
- (SETQ B A3)
- (GO AGAIN) ))
-